#include <rtthread.h>
#include "rtdevice.h"

#define DBG_TAG "led.c"
#define DBG_LVL DBG_LOG
#include <rtdbg.h>

// LED引脚定义 在文件中 Libraries/rt_drivers/drv_gpio.c 中查找
#define LED1_RTTPIN  (57)     // LED1 引脚 - PB5
#define LED2_RTTPIN  (56)     // LED1 引脚 - PB4
#define LED3_RTTPIN  (41)     // LED1 引脚 - PA8

/**
 * @brief  初始化 LED
 * @param  无
 * @return 无
 */
void led_init(void)
{
    rt_pin_mode(LED1_RTTPIN, PIN_MODE_OUTPUT);
    rt_pin_mode(LED2_RTTPIN, PIN_MODE_OUTPUT);
    rt_pin_mode(LED3_RTTPIN, PIN_MODE_OUTPUT);

    rt_pin_write(LED1_RTTPIN, PIN_LOW);
    rt_pin_write(LED2_RTTPIN, PIN_LOW);
    rt_pin_write(LED3_RTTPIN, PIN_LOW);
}

/**
 * @brief  点亮 LED1
 * @param  无
 * @return 无
 */
void led1_on(void)
{
    rt_pin_write(LED1_RTTPIN, PIN_HIGH);
    LOG_D("led1 on");
}

/**
 * @brief  关闭 LED1
 * @param  无
 * @return 无
 */
void led1_off(void)
{
    rt_pin_write(LED1_RTTPIN, PIN_LOW);
    LOG_D("led1 off");
}

/**
 * @brief  获取 LED1 的状态
 * @param  无
 * @return 无
 */
int get_led1_status(void)
{
    rt_pin_read(LED1_RTTPIN);
}

/**
 * @brief  翻转 LED1 电平
 * @param  无
 * @return 无
 */
void led1_toggle(void)
{
    if(get_led1_status() == 0)
        led1_on();
    else
        led1_off();
}

/**
 * @brief  点亮 LED2
 * @param  无
 * @return 无
 */
void led2_on(void)
{
    rt_pin_write(LED2_RTTPIN, PIN_HIGH);
    LOG_D("led2 on");
}

/**
 * @brief  关闭 LED2
 * @param  无
 * @return 无
 */
void led2_off(void)
{
    rt_pin_write(LED2_RTTPIN, PIN_LOW);
    LOG_D("led2 off");
}

/**
 * @brief  获取 LED2 的状态
 * @param  无
 * @return 无
 */
int get_led2_status(void)
{
    rt_pin_read(LED2_RTTPIN);
}

/**
 * @brief  点亮 LED3
 * @param  无
 * @return 无
 */
void led3_on(void)
{
    rt_pin_write(LED3_RTTPIN, PIN_HIGH);
}

/**
 * @brief  关闭 LED3
 * @param  无
 * @return 无
 */
void led3_off(void)
{
    rt_pin_write(LED3_RTTPIN, PIN_LOW);
}

/**
 * @brief  LED3 线程执行函数
 * @param  parameter 线程的入参
 * @return 无
 */
void led3_thread_entry(void *parameter)
{
    while (1)
    {
        led3_on();
        rt_thread_mdelay(200);
        led3_off();
        rt_thread_mdelay(200);
    }
}

/**
 * @brief  启动 LED3 处理线程
 * @param  无
 * @return 无
 */
int start_led3_thread(void)
{
    /* 创建 LED3 处理线程 */
    rt_thread_t thread = rt_thread_create("led3_thread", led3_thread_entry, RT_NULL, 512, 10, 20);
    if (thread != RT_NULL)
    {
        rt_thread_startup(thread);  // 创建成功则启动线程
    }
    else
    {
        LOG_E("create led3 thread failed");
        return (-RT_ERROR);
    }

    return RT_EOK;
}

